import turtle
import random

def draw_tree(branch_length, t):
    """递归绘制树干和树枝"""
    # 随机决定树枝的角度和长度变化
    angle = random.randint(15, 45)
    branch_factor = random.uniform(0.6, 0.8)
    
    # 如果树枝足够长，继续分岔
    if branch_length > 10:
        # 绘制当前树枝
        t.forward(branch_length)
        
        # 绘制右侧树枝
        t.right(angle)
        draw_tree(branch_length * branch_factor, t)
        
        # 绘制左侧树枝
        t.left(angle * 2)
        draw_tree(branch_length * branch_factor, t)
        
        # 返回原位
        t.right(angle)
        t.backward(branch_length)
    
    # 当树枝足够短时，绘制叶子
    else:
        # 随机选择叶子颜色（绿色系）
        leaf_colors = ["#228B22", "#32CD32", "#00FF00", "#7CFC00", "#7FFF00"]
        t.color(random.choice(leaf_colors))
        t.begin_fill()
        t.circle(3)  # 绘制叶子
        t.end_fill()
        # 恢复树枝颜色
        t.color("#8B4513")

def draw_ground(t):
    """绘制地面"""
    t.penup()
    t.goto(-300, -250)
    t.pendown()
    t.color("#228B22")
    t.begin_fill()
    for _ in range(2):
        t.forward(600)
        t.right(90)
        t.forward(100)
        t.right(90)
    t.end_fill()

# 主程序
if __name__ == "__main__":
    # 设置画布
    screen = turtle.Screen()
    screen.title("一棵树")
    screen.setup(width=800, height=600)
    screen.bgcolor("#87CEEB")  # 天空蓝色
    
    # 创建画笔
    t = turtle.Turtle()
    t.speed(0)  # 最快速度
    t.color("#8B4513")  # 树干棕色
    t.pensize(2)
    
    # 定位到地面位置，准备画树
    t.penup()
    t.goto(0, -250)
    t.pendown()
    t.left(90)  # 向上
    
    # 绘制地面
    draw_ground(t)
    
    # 重置画笔状态准备画树
    t.penup()
    t.goto(0, -250)
    t.pendown()
    t.left(90)
    t.color("#8B4513")
    t.pensize(3)
    
    # 绘制树
    draw_tree(100, t)
    
    # 隐藏画笔
    t.hideturtle()
    
    # 点击关闭窗口
    screen.exitonclick()
